package Homework.dayB;

import java.util.Scanner;

public class day0201 {
    /**
     * 正则表达式练习:
     * 1:编写匹配数字的正则表达式,数字至少一位以上.
     * <p>
     * 2:匹配字符串,要求输入3-15位,内容只能是数字,字母下,划线
     * <p>
     * <p>
     * 完成下面编程题:
     * 程序启动后,要求用户输入用户名,用户名出现内容要求上述正则表达式2的要求.不匹配则直接
     * 提示用户名有误.
     * 如果无误,则要求用户继续输入年龄,规则为上述正则表达式1的要求,不匹配则提示年龄有误
     * 以上两个输入获取是都要求以字符串形式接受(Scanner的nextLine方法获取)
     * <p>
     * 最后验证年龄在1-100岁之间(包含1和100)
     * 提示:这里可以不用正则表达式验证范围,是否转换为数字判定更方便?
     *
     * @author Xiloer
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
                // 用户名格式
        String regexUsername = "[a-zA-Z0-9_]{3,15}";
                // 年龄正则表达式，考虑了1到100以及单位"岁"
        String regexAge = "[1-9][0-9]";
        String username = "";

        while (true) {
                //提示用户输入用户名
            System.out.println("请输入用户名");
            username = sc.nextLine();
                //验证用户输入的用户名是否合法
            if (validateUsername(username, regexUsername)) {
                System.out.println("输入正确");
                // 使用 continue使用户可以重新输入
            } else {
                System.out.println("用户名有误，请重新输入");
                continue;
            }

            System.out.println("请输入你的年龄");
                //存储用户输入的年龄
            String ageInput = sc.nextLine();
                //判断用户输入的名字是否合法
            if (validateAge(ageInput, regexAge)) {
                System.out.println("正在判断中...");
                // 使用 continue 允许用户重新输入
            } else {
                System.out.println("年龄有误，请重新输入");
                continue;
            }
            int age = parseAge(ageInput);
            if (age >= 1 && age <= 100) {
                System.out.println("输入正确");
            } else {
                System.out.println("年龄有误，请重新输入");
                continue;
            }
                 // 用户名和年龄验证通过，输出确认信息
            System.out.println("你的名字是" + username);
            System.out.println("你的年龄是" + ageInput);
            break;
        }
    }

    // 验证用户名
    public static boolean validateUsername(String input, String pattern) {
        return input.matches(pattern);
    }

    // 验证年龄
    public static boolean validateAge(String input, String pattern) {
        return input.matches(pattern);
    }

    // 年龄异常处理
    public static int parseAge(String ageInput) {
        try {
            return Integer.parseInt(ageInput.replace("岁", ""));
        } catch (NumberFormatException e) {
            System.out.println("年龄格式错误，请确保输入数字。");
            return -1;
        }
    }
}

